ALTER    PROCEDURE REPORTE_FLUJO_EFECTIVO @CVEDESARROLLO VARCHAR(20), @ANIO INT, @DUENO VARCHAR(20) = NULL  AS

DECLARE @CVELOTE VARCHAR(20),@VENCIMIENTO DATETIME,@MENSUALIDAD DECIMAL(18,2), @ANIOTMP INT, @FECHATMP DATETIME
DECLARE @INGRESOTMP DECIMAL(18,2), @NOTMP INT, @MESTMP INT,@ACUMULADO DECIMAL(18,2),@SUMNOTMP INT,@SUMINGRESO DECIMAL(18,2)
set language SPANISH
DECLARE CORRIDA SCROLL CURSOR FOR 
SELECT 	DetVenta.Cvelote,DetVenta.Vencimiento fecha,DetVenta.Mensualidad
FROM 	detVenta,lotes
WHERE 	detVenta.cveLote=lotes.idlote and 
	lotes.staventa='C' and 
	left(detVenta.cveLote, 3) = @CVEDESARROLLO
union
SELECT 	lotes.idlote,
	FechaApartado as fecha, idApartado
FROM 	lotes 
	LEFT JOIN ventas ON ventas.idlote = lotes.idlote
	LEFT JOIN apartados ON apartados.idventa = ventas.idventa
WHERE idDesarrollo= @CVEDESARROLLO 
	and staventa = 'C'  
	AND estadoactual = 'A'
union 
SELECT 	lotes.idlote,
	ventas.FechaFirma as fecha,
	CASE WHEN ventas.idmoneda = 1 THEN PrecioTotal-importeApartado
		ELSE ISNULL(tc.tipodecambio, 0) * (PrecioTotal-importeApartado)
	END
FROM 	lotes 
	LEFT JOIN ventas ON ventas.idlote = lotes.idlote
	LEFT JOIN apartados ON apartados.idventa = ventas.idventa
	LEFT JOIN tipodecambio tc ON tc.fecha = apartados.fechaApartado
WHERE 	idDesarrollo=@CVEDESARROLLO
	AND staventa='C'
	AND estadoactual = 'A'
	AND lotes.idlote not in (SELECT Enganches.CveLote
			FROM 	Enganches
				LEFT JOIN lotes ON lotes.idlote =  Enganches.CveLote
			WHERE 	Left(Enganches.[CveLote],3)=@CVEDESARROLLO and 
				lotes.StaVenta='C'
			group by enganches.cvelote having count(*)>1) and
	idPlan = 1
union
SELECT 	lotes.idlote,
	ventas.FechaFirma as fecha,
	CASE WHEN ventas.idmoneda = 1 THEN PrecioTotal-importeApartado
		ELSE ISNULL(tc.tipodecambio, 0) * (PrecioTotal-importeApartado)
	END
FROM 	lotes 
	LEFT JOIN ventas ON ventas.idlote = lotes.idlote
	LEFT JOIN apartados ON apartados.idventa = ventas.idventa
	LEFT JOIN tipodecambio tc ON tc.fecha = apartados.fechaApartado
WHERE 	idDesarrollo=@CVEDESARROLLO
	AND staventa='C'
	AND estadoactual = 'A'
	AND (engdiferido != 'S' or engdiferido is null) and
	lotes.idlote not in (SELECT Enganches.CveLote
			FROM 	Enganches
				LEFT JOIN lotes ON lotes.idlote =  Enganches.CveLote
			WHERE 	Left(Enganches.[CveLote],3)=@CVEDESARROLLO and 
				lotes.StaVenta='C'
			group by enganches.cvelote having count(*)>1)and
	idPlan > 1
union
SELECT 	Enganches.CveLote, FechaVento fecha, 
	CASE WHEN ventas.idmoneda = 1 THEN importe-importeApartado
		ELSE ISNULL(tc.tipodecambio, 0) * (importe-importeApartado)
	END
FROM 	Enganches
	LEFT JOIN lotes ON lotes.idlote = enganches.cvelote
	LEFT JOIN ventas ON ventas.idlote = lotes.idlote
	LEFT JOIN apartados ON apartados.idventa = ventas.idventa
	LEFT JOIN tipodecambio tc ON tc.fecha = apartados.fechaApartado
WHERE 	Left(Enganches.[CveLote],3)=@CVEDESARROLLO 
	and lotes.StaVenta='C'
	AND estadoactual = 'A'
	and Enganches.CveLote not in (SELECT 	Enganches.CveLote
			FROM 	Enganches
				LEFT JOIN lotes ON lotes.idlote = enganches.cvelote
			WHERE 	Left(Enganches.[CveLote],3)=@CVEDESARROLLO 
				and lotes.StaVenta='C'
			group by enganches.cvelote having count(*)=1) and
	nopago = 1
union
SELECT 	Enganches.CveLote, FechaVento fecha, 
	CASE WHEN ventas.idmoneda = 1 THEN importe-importeApartado
		ELSE ISNULL(tc.tipodecambio, 0) * (importe-importeApartado)
	END
FROM 	Enganches
	LEFT JOIN lotes ON lotes.idlote = enganches.cvelote 
	LEFT JOIN ventas ON ventas.idlote = lotes.idlote
	LEFT JOIN apartados ON apartados.idventa = ventas.idventa
	LEFT JOIN tipodecambio tc ON tc.fecha = apartados.fechaApartado
WHERE 	Left(Enganches.[CveLote],3)=@CVEDESARROLLO 
	and ENGDIFERIDO = 'S'
	and lotes.StaVenta='C' 
	and nopago > 1
	AND estadoactual = 'A'
ORDER BY fecha
SET @ANIOTMP = 1999
SET @MESTMP = 13
SET @INGRESOTMP = 0
SET @ACUMULADO = 0
SET @NOTMP = 0
SET @SUMNOTMP=0
SET @SUMINGRESO = 0.0
CREATE TABLE #FLUJOS(
	MES DATETIME,
	INGRESO DECIMAL( 18,2 ),
	ACUMULADO DECIMAL( 18,2 )
)
OPEN CORRIDA
FETCH NEXT FROM CORRIDA INTO @CVELOTE,@VENCIMIENTO,@MENSUALIDAD
WHILE @@FETCH_STATUS = 0
BEGIN
	SET @FECHATMP = @VENCIMIENTO
	SET @ANIOTMP = DATEPART( YEAR, @FECHATMP )
	IF DATEPART( YEAR, @FECHATMP ) < @ANIO BEGIN
		WHILE @@FETCH_STATUS = 0 BEGIN
			IF @ANIOTMP = DATEPART( YEAR, @VENCIMIENTO )  BEGIN
				SET @INGRESOTMP = @INGRESOTMP + @MENSUALIDAD
				SET @NOTMP = @NOTMP + 1
				FETCH NEXT FROM CORRIDA INTO @CVELOTE,@VENCIMIENTO,@MENSUALIDAD
			END
			ELSE BREAK
		END
		FETCH PRIOR FROM CORRIDA INTO @CVELOTE,@VENCIMIENTO,@MENSUALIDAD
		SET @ACUMULADO = @ACUMULADO + @INGRESOTMP
		INSERT INTO #FLUJOS (MES, INGRESO, ACUMULADO) VALUES ('01/01/'+CONVERT(VARCHAR,@ANIOTMP), @INGRESOTMP, @ACUMULADO)
		SET @NOTMP = 0
		SET @INGRESOTMP=0
	END
	ELSE IF DATEPART( YEAR, @FECHATMP ) = @ANIO BEGIN
		WHILE @@FETCH_STATUS = 0 BEGIN
			IF @ANIOTMP = DATEPART( YEAR, @VENCIMIENTO ) BEGIN
				SET @MESTMP = DATEPART( MONTH, @VENCIMIENTO )
				WHILE @@FETCH_STATUS = 0 BEGIN
					IF @MESTMP = DATEPART( MONTH, @VENCIMIENTO ) AND @ANIOTMP = DATEPART( YEAR, @VENCIMIENTO ) BEGIN
						SET @INGRESOTMP = @INGRESOTMP + @MENSUALIDAD
						SET @NOTMP = @NOTMP + 1
						FETCH NEXT FROM CORRIDA INTO @CVELOTE,@VENCIMIENTO,@MENSUALIDAD
					END
					ELSE BREAK
				END
				SET @ACUMULADO = @ACUMULADO + @INGRESOTMP
				INSERT INTO #FLUJOS (MES, INGRESO, ACUMULADO) VALUES ('02/'+CONVERT(VARCHAR,@MESTMP)+'/'+CONVERT(VARCHAR,@ANIO), @INGRESOTMP, @ACUMULADO)
				SET @SUMNOTMP = @SUMNOTMP + @NOTMP
				SET @SUMINGRESO=@SUMINGRESO+@INGRESOTMP
				SET @NOTMP = 0
				SET @INGRESOTMP=0
			END
			ELSE BREAK
		END
		SET @ACUMULADO = @ACUMULADO + @INGRESOTMP
		INSERT INTO #FLUJOS (MES, INGRESO, ACUMULADO) VALUES ('15/12/'+CONVERT(VARCHAR,@ANIO), @SUMINGRESO, @ACUMULADO)
		FETCH PRIOR FROM CORRIDA INTO @CVELOTE,@VENCIMIENTO,@MENSUALIDAD
	END
	ELSE BEGIN
		WHILE @@FETCH_STATUS = 0 BEGIN
			IF @ANIOTMP = DATEPART( YEAR, @VENCIMIENTO ) BEGIN
				SET @INGRESOTMP = @INGRESOTMP + @MENSUALIDAD
				SET @NOTMP = @NOTMP + 1
			END
			ELSE BREAK
			FETCH NEXT FROM CORRIDA INTO @CVELOTE,@VENCIMIENTO,@MENSUALIDAD
		END
		FETCH PRIOR FROM CORRIDA INTO @CVELOTE,@VENCIMIENTO,@MENSUALIDAD
		SET @ACUMULADO = @ACUMULADO + @INGRESOTMP
		INSERT INTO #FLUJOS (MES, INGRESO, ACUMULADO) VALUES ('01/01/'+CONVERT(VARCHAR,@ANIOTMP), @INGRESOTMP, @ACUMULADO)
		SET @NOTMP = 0
		SET @INGRESOTMP=0
	END
	FETCH NEXT FROM CORRIDA INTO @CVELOTE,@VENCIMIENTO,@MENSUALIDAD
END
CLOSE CORRIDA
DEALLOCATE CORRIDA
DECLARE @SQL NVARCHAR(1000)
SELECT @SQL = 'SELECT * FROM #FLUJOS'
EXEC SP_EXECUTESQL @SQL



GO
